﻿#ifndef ETOOLS_H
#define ETOOLS_H
#include <QTypeInfo>
#include <QStringList>
#include <QList>
#include <QMap>
#include <QDateTime>

/*
 * 一个简单粗浅的QT上位机项目常用工具函数库
 * */

#define FRE_MODE 1                  //为1 则以1000为进率。 为2 则以1024为进率
#define MAP_LIST_END { "", 1 }      //结束符

#define EDEBUG_OUTPUT
#define DEBUG_BUFFER_MAX_LENGTH 2048  //调试输出文本最大长度


class QComboBox;
namespace ETOOLS
{
//第一个参数是输出信息等级, 分别代表了不同的颜色
    void EDEBUG( int flag, const char* format, ...);

    /*字符串类型的单位， 对应该单位所代表的数据*/
    typedef struct{
        QString key;
        double val;
    }Map;

    extern Map e_map[]; //数据比对的依据

    //指针释放相关操作
    template<typename T>
    inline void DELETE_PTR(T *&p){ if(nullptr != p) { delete p; p=nullptr; }}     //释放指针
    template<typename T>
    inline void DELETE_PTRS(T *&p){ if(nullptr != p) { delete[] p; p=nullptr; }}  //释放对象指针数组

    bool regText(const QString &src, const Map& map, double &value, bool isCaseInsensitive=true);               //从src中， 提取出数据部分, 成功返回true, 数据存储在value中                                          //返回一个被装载的splits
    bool stringToNumber(const QString &src, double &value, bool isCaseInsensitive=true);                        //核心函数， 通过字符串转换出对应的数据

    //数据转字符串
    QString doubleToStr(const double& src, int precision=5);                                                    //double类型转换为String， 可以控制精度
    QString numberToStringGMK(const double &src, int rate, int precision=5);                                    //根据整形值， 返回带有单位的QString, 文本为G M K


    //其他杂项
    //comboBox
    void comboBoxAddView(QWidget *, int max_show_count=8);  // 为下拉框加上委托， 使得其可以适用更多CSS
    void comboBoxEnabled(QComboBox *com, const QList<int> &arr, bool mode=false); //设置下拉框的一些选项的可选择性，mode=false 则禁用这些选项，否则就恢复这些选项
};



#endif // ETOOLS_H
